#pragma once

#include "ui_UIEventRec.h"
#include "ui_Window.h"

namespace xs
{

//! Glowna klasa systemu ui (uzywac jako obiekt globalny g_ui)

class UISystem
{
public:
	//! Ustawia wszystko na 0.
				UISystem();

	//! Przesyla zdarzenie do obecnego sluchacza.
	void		gen_event(int event, Window *sender);
	//! Wysyla zdarzenie myszki do kontrolek.
	void		mouse(float x, float y, xs::MouseEventType event);
	//! Wysyla zdarzenie klawiatury do kontrolek.
	void		key(u32 code, bool down);
	//! Wysyla zdarzenie wprowadzenia znaku z klawiatury do kontrolek.
	void		type(wchar_t c);
	//! Ustawia sluchacza zdarzen kontrolek.
	void		set_event_rec(UIEventRec *new_rec);
	//! Ustawia glowna kontrolke.
	void		set_root(Window *wnd);
	//! Zwraca aktywna kontrolke.
	Window*		get_active();
	//! Przechodzi po kontrolkach algorytmem dfs startujac z korzenia.
	void		root_dfs(UIVisitor *visitor);
private:
	UIEventRec*	m_event_rec;
	Window*		m_root;
	bool		m_left_pressed;
	Window*		m_active;
};

//! Globalny glowny obiekt ui.
extern UISystem	g_ui;

}